大家好,昨天將資料進行標準化,並且準備好要用來訓練的資料,今天就要建立與訓練模型。
這個房價預測模型要使用的是之前講過的Sequential Model,建構這個模型所需的架構只會使用到全連接層,將會由三層全連接層組成。昨天有提到資料輸入的維度是21,所以在輸入層設定input_shape(21,)。然後隱藏層使用的激活函數是ReLU,而輸出層不使用激活函數。
model = tf.keras.Sequential('m1')
model.add(keras.layers.Dense(64, activation='relu', input_shape=(21,)))
model.add(keras.layers.Dense(64, activation='relu'))
model.add(keras.layers.Dense(1))
接著要設定優化器、損失函數、指數函數,優化器使用Adam;損失函數使用均方誤差(mean square error ,MSE);指數函數使用平均絕對誤差(mean absolute error, MAE)。
model.compile(keras.optimizers.Adam(0.001),
loss=keras.losses.MeanSquaredError(),
metrics=[keras.metrics.MeanAbsoluteError()])
再來要建立模型的儲存位置,會用到之前還沒匯入的套件os。
import os
model_dir = 'models/m1/'
os.makedirs(model_dir)
然後設定回調函數,
log_dir = os.path.join('models', 'm1') model_cbk=keras.callbacks.TensorBoard(log_dir=log_dir)
model_mckp=keras.callbacks.ModelCheckpoint(model_dir+'/Best-model-1.h5',
monitor='val_mean_absolute_error',
save_best_only=True,
mode='min')
最後就是開始訓練模型,將用來訓練的資料傳入,輸入層設定有64個unit,所以批次傳入資料也設定為64,然後訓練300次,再設定用來驗證的資料,並用回調函數儲存最好的模型。
history = model.fit(x_train, y_train,
batch_size=64,
epochs=300,
validation_data=(x_val, y_val),
callbacks=[model_cbk, model_mckp])